[SWEA] - SW 문제 해결 기본 : List2

알고리즘 / October 06, 2020

thumbnail

  • 모든 문제의 저작권은 SW Expert Academy에 있습니다.

문제 목록

[D2] No. 4836 색칠하기
[D2] No. 4839 이진탐색

풀이 코드 (Python)

1. 4836번 - 색칠하기

  • 1이 빨강, 2가 파랑이니 합이 3만 넘으면 보라겠지? 라는 생각이 함정입니다.
  • 빨강 영역만 셋이 겹칠때도 합이 3이 된다는 사실을 잊지 마세요.
T = int(input())
for i in range(1, T + 1):
    N = int(input())
    cnt = 0
    canvas = [[0] * 10 for _ in range(10)]
    for j in range(N):
        top, left, bottom, right, color = map(int, input().split())
        for row in range(top, bottom+1):
            for col in range(left, right+1):
                if canvas[row][col] is color:
                    continue
                else:
                    canvas[row][col] += color
    for row in range(10):
        for col in range(10):
            if canvas[row][col] >= 3:
                cnt += 1

    print("#{} {}".format(i, cnt))

2. 4836번 - 이진탐색

  • 파이썬의 기본 나눗셈 연산은 소숫점까지 계산합니다. (Ex. 5 나누기 2 의 결과는 2.5)
T = int(input())

def binSearch(mid, left, right, cnt, find):
    while True:
        if find == mid:
            return cnt
        if find > mid:
            return binSearch(int((mid + right) / 2), mid, right, cnt+1, find)
        elif find < mid:
            return binSearch(int((mid + left) / 2), left, mid, cnt+1, find)


for i in range(1, T+1):
    P, Pa, Pb = map(int, input().split())
    cntA, cntB = 0, 0
    cntA = binSearch(int((1 + P) / 2), 1, P, 0, Pa)
    cntB = binSearch(int((1 + P) / 2), 1, P, 0, Pb)

    if cntA == cntB:
        print("#{} {}".format(i, '0'))
    elif cntA < cntB:
        print("#{} {}".format(i, 'A'))
    else:
        print("#{} {}".format(i, 'B'))